package cn.huaqingcheng.tool.http;

import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * HTTP Header
 **/
@SuppressWarnings("ClassNamePrefixedWithPackageName")
@Getter
@AllArgsConstructor
public enum HttpHeader {

    //------------------------------------------------------------- 通用头域
    /**
     * 提供验证头，例如：
     * <pre>
     * Authorization: Basic YWxhZGl
     * </pre>
     */
    AUTHORIZATION("Authorization"),
    /**
     * 提供给代理服务器的用于身份验证的凭证，例如：
     * <pre>
     * Proxy-Authorization: Basic YWxhZG
     * </pre>
     */
    PROXY_AUTHORIZATION("Proxy-Authorization"),
    /**
     * 提供日期和时间标志,说明报文是什么时间创建的
     */
    DATE("Date"),
    /**
     * 允许客户端和服务器指定与请求/响应连接有关的选项
     */
    CONNECTION("Connection"),
    /**
     * 给出发送端使用的MIME版本
     */
    MIME_VERSION("MIME-Version"),
    /**
     * 如果报文采用了分块传输编码(chunked transfer encoding) 方式,就可以用这个首部列出位于报文拖挂(trailer)部分的首部集合
     */
    TRAILER("Trailer"),
    /**
     * 告知接收端为了保证报文的可靠传输,对报文采用了什么编码方式
     */
    TRANSFER_ENCODING("Transfer-Encoding"),
    /**
     * 给出了发送端可能想要"升级"使用的新版本和协议
     */
    UPGRADE("Upgrade"),
    /**
     * 显示了报文经过的中间节点
     */
    VIA("Via"),
    /**
     * 指定请求和响应遵循的缓存机制
     */
    CACHE_CONTROL("Cache-Control"),
    /**
     * 用来包含实现特定的指令，最常用的是Pragma:no-cache。在HTTP/1.1协议中，它的含义和Cache- Control:no-cache相同
     */
    PRAGMA("Pragma"),
    /**
     * 请求表示提交内容类型或返回返回内容的MIME类型
     */
    CONTENT_TYPE("Content-Type"),

    //------------------------------------------------------------- 请求头域
    /**
     * 指定请求资源的 主机和端口号，必须表示请求url的原始服务器或网关的位置。HTTP/1.1请求必须包含主机头域，否则系统会以400状态码返回
     */
    HOST("Host"),
    /**
     * 允许客户端指定请求uri的源资源地址，这可以允许服务器生成回退链表，可用来登陆、优化cache等。他也允许废除的或错误的连接由于维护的目的被 追踪。如果请求的uri没有自己的uri地址，Referer不能被发送。如果指定的是部分uri地址，则此地址应该是一个相对地址
     */
    REFERER("Referer"),
    /**
     * 指定请求的域
     */
    ORIGIN("Origin"),
    /**
     * HTTP客户端运行的浏览器类型的详细信息。通过该头部信息，web服务器可以判断到当前HTTP请求的客户端浏览器类别
     */
    USER_AGENT("User-Agent"),
    /**
     * 指定客户端能够接收的内容类型，内容类型中的先后次序表示客户端接收的先后次序
     */
    ACCEPT("Accept"),
    /**
     * 指定HTTP客户端浏览器用来展示返回信息所优先选择的语言
     */
    ACCEPT_LANGUAGE("Accept-Language"),
    /**
     * 指定客户端浏览器可以支持的web服务器返回内容压缩编码类型
     */
    ACCEPT_ENCODING("Accept-Encoding"),
    /**
     * 浏览器可以接受的字符编码集
     */
    ACCEPT_CHARSET("Accept-Charset"),
    /**
     * HTTP请求发送时，会把保存在该请求域名下的所有cookie值一起发送给web服务器
     */
    COOKIE("Cookie"),
    /**
     * 请求的内容长度
     */
    CONTENT_LENGTH("Content-Length"),

    //------------------------------------------------------------- 响应头域
    /**
     * 提供WWW验证响应头
     */
    WWW_AUTHENTICATE("WWW-Authenticate"),
    /**
     * Cookie
     */
    SET_COOKIE("Set-Cookie"),
    /**
     * Content-Encoding
     */
    CONTENT_ENCODING("Content-Encoding"),
    /**
     * Content-Disposition
     */
    CONTENT_DISPOSITION("Content-Disposition"),
    /**
     * ETag
     */
    ETAG("ETag"),
    /**
     * 重定向指示到的URL
     */
    LOCATION("Location");

    private final String value;
}
